7. Linking {CSAPP}
- traditional static linking at compile time
- Dynamic linking of shared libraries at load time
- Dynamic linking of shared libraries at runtime
λ§μ»€κ° μ€μν μν μ λ§‘κ² λ λ°μλ λͺ¨λ Έλ¦¬μμΌλ‘λ κ°λΉνκΈ° μ΄λ €μ΄ ν¬κΈ°μ νλ‘μ νΈλ€μ΄ μ겨λκΈ° μμνκ³ , λͺ¨λμ΄λΌλ κ°λ κ³Ό λ 립μ μΈ μ»΄νμΌμ λΆλ¦¬μν€κΈ° μμν λ°μ μλ€. κ·Έλμ λͺ¨λ νλλ₯Ό μμ νλ©΄ λͺ½λ λ€ μ»΄νμΌ νλ κ²μ΄ μλλΌ ν΄λΉ λͺ¨λλ§ μ»΄νμΌ νκ³ , λ§ν¬λ§ μ νλ μμΌλ‘ μ΄λ£¨μ΄μ§λ€.
WHY λ§νΉμ λ°°μμΌ νλκ°?
- λ€μ€ λͺ¨λλ‘ μ΄λ£¨μ΄μ§ ν° νλ‘κ·Έλ¨μ μμ±νκ³ λΉλνκΈ° μν΄μμ.
- μλͺ»λ μ μλ³μλ ν¨μ λ°μλ₯Ό μ°Έμ‘°νλ μνν νλ‘κ·Έλλ° μλ¬λ₯Ό νΌνκΈ° μν΄μμ.
- μ μλ³μμ μ§μλ³μμ μ°¨μ΄μ , static λ³μλ ν¨μλ₯Ό μ μνλ μ΄μ μ λν΄ μ μ μκΈ° λλ¬Έ!
- μ€μν λ€λ₯Έ μμ€ν 컨μ μ μ΄ν΄νκΈ° μν΄μμ λ‘λ, κ°μλ©λͺ¨λ¦¬, νμ΄μ§, λ©λͺ¨λ¦¬ 맀ν μ΄μ° νλκ°μ΄ λ€λ€ κ΅΅μ§νꡬλ§
- 곡μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ κ·Ήμ μΌλ‘ νμ©νκΈ° μν΄μμ.
λ°νμλ£ {7. Linking} {CSAPP}
DUMP
-
7.2. Static Linking
ld
μ μν΄μ νμν λͺ¨λ κ°μ²΄νμΌλ€μ΄ νλμ μ€ννμΌλ‘ λ΄κΈ°λ ννλ₯Ό λ§νλ€.
- symbol resolution, λͺ©μ νμΌλ€μ 'symbol'μ΄λ μ΄λ¦μ λ νΌλ°μ€λ‘ μ μλλ€. κ·Έ μμ ν¨μ, μ μλ³μ, μ μ λ³μ λ±μ λν μ μκ° λ€μ΄μλ€.
- relocation μ»΄νμΌλ¬μ μ΄μ λΈλ¬κ° λ½μλΈ μ°λ¬Όμ μ£Όμκ°μ΄ 0λ²μ§λΆν° μμνλ€. λ§μ»€λ μ΄ μ¬λ¬ λͺ©μ νμΌλ€μ μμΉλ₯Ό μ¬μ μνλ€.
-
7.3. Object Files
- relocatable object file, μ»΄νμΌμ΄ λ λ°μ΄λ리μ΄μ§λ§ κ·Έ μμ²΄λ‘ μ€νν μλ μλ λͺ©μ νμΌ. λ°λμ λ§μ»€μ μν΄ μ»΄νμΌ νμμ λ§ν¬ λμ΄μΌ νλ€.
- executable object file, μ€ν κ°λ₯ν λͺ©μ νμΌλ‘, λ©λͺ¨λ¦¬μ 곧μ₯ 볡λΆν΄μ μ€νλ μ μλ λͺ©μ νμΌ
- shared object file, νΉλ³ν μ’ λ₯μ relocatable object fileμΈλ°, λ©λͺ¨λ¦¬μ μ¬λΌκ° λμ μΌλ‘ λ§ν¬λ μ μμ. μ¬μ§μ΄ λ‘λνμ, λ°νμ λͺ¨λ κ°λ₯.
-
7.5. Symbols and Symbol Tables
- κ°μ μ΄λ¦μ λ€λ₯Έ ν¨μμ λ€μ΄μλ μ μ λ³μλ μλ¬κ° λλ€? μλλ€? => μλμ μλ‘ λ€λ₯Έ μ΄λ¦μ κ°μ§κ² λ©λλ€.
- global symbols that are defined by module m and that can be referenced by other modules β nonstatic functions and global variables
- global symbols that are referenced by module m but defined by some other module
extern
- local symbols that are defined and referenced exclusively by module m
static
-
7.6. Symbol Resolution
- μ¬λ³Ό μ°Έμ‘°μμ μ λ¨Όμ λͺ¨λ λͺ¨λμ λλ©΄μ λ‘컬 μ¬λ³Όμ΄ λͺ¨λ μμμ μ μΌνμ§ μ¬λΆλ₯Ό κ²μ¬νλ κ²μΌλ‘ μμνλ€.
- μ μμ μΌλ‘ μ μλ κΈλ‘λ² μ¬λ³Όμ μ’ λ κΉλ€λ‘μ΄λ°, νμ¬ λͺ¨λμ μ μλμ΄μμ§ μμ μ¬λ³Ό (μ μΈλ§ λμ΄μμ)μ λ¨μ μΈλΆμ μ μλμ΄ μλ€κ³ κ°μ£Όν μλ°μ μμ.
- κ·Έλ¬ν 'μ μλμ΄μλ€κ³ κ°μ£Όν μ¬λ³Ό'λ€μ μμΉλ₯Ό linker symbol table entry μ 보κ΄νλ€. μ»΄νμΌλ¬ μ± μμ μλ. λ§μ»€μ μ± μμ.
- 7.6.1. λ§μ»€κ° μ€λ³΅λ μ¬λ³Ό μ΄λ¦μ λμ²νλ λ°©λ²
- 7.6.2. λ§μ»€κ° μ μ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ§ν¬νλ λ°©λ²
- 7.6.3. λ§μ»€κ° μ μ λΌμ΄λΈλ¬λ¦¬μ μ°Έμ‘°λ₯Ό resolve νλ λ°©λ²
-
7.7. Relocation
- symbol resolution μμ μ λ§μΉλ©΄ relocation μμ μ μννλ€. λ§μ»€ ν μΌλ λ§λ€.
- λ§μ»€λ μ΄λ―Έ μ°κ΄ λͺ¨λλ€μ λͺ¨λ
.data
μΉμ λ€μ λν μ νν μ¬μ΄μ¦λ₯Ό μκ³ μλ€. - κ°κ°μ μ¬λ³Όλ€μκ² 'μ€ν μ μμΉν μ£Όμ'λ₯Ό μ μνλ€. (λ¬Όλ‘ κ·Έκ²μ΄ μ€μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μλ―Ένλ κ²μ μλ κ²μ΄λ€.)
-
7.8. Executable Object Files
- λ§μ»€κ° symbol resolutionκ³Ό relocation μμ μ ν΅ν΄ relocatable object fileμ executable object fileλ‘ λ§λ€μλ€. ππππππ
- κ·Έ μμλ κ½€ λ§μ κ²λ€μ΄ relocatable object fileκ³Ό λΉμ·νμ§λ§, μ΄μ relocation μμ
λλΆμ
.text
,.rodata
,.data
μμλ€μ μμΉκ° κ²°μ μ΄ λ μνκ° λμλ€. .init
μΉμ μ΄ μΆκ°κ° λλλ°,_init
μ΄λΌλ μμ ν¨μλ₯Ό νλ‘κ·Έλ¨ μ€νμ μ²μ νΈμΆνκ² λλ€..rel
μΉμ μ μ΄μ λ μ΄μ νμκ° μλ€.- program header table μμλ μΉμ λ€μ΄ λ‘λλμ΄ μΈκ·Έλ¨ΌνΈκ° λ λμ 맀νμ λν μ λ³΄κ° λ€μ΄κ°λ€. ELF νμΌμμ μΉμ μ΄μλ μ λ€μ΄ νλ‘μΈμ€κ° λλ©΄ μΈκ·Έλ¨ΌνΈκ° λλ μ.
-
7.10. Dynamic Linking with Shared Libraries
- 곡μ λΌμ΄λΈλ¬λ¦¬λ λ©λͺ¨λ¦¬μ ν λ²λ§ λ‘λλλ©΄ λ€λ₯Έ νλ‘μΈμ€λ€μ΄ μΌλ§λ μ§ κ°μ Έλ€ μΈ μ μλ€. (COW μλμ€λ?) μ»΄νμΌ μ
-fpic
νλκ·Έλ₯Ό λ¬λ©΄ μ»΄νμΌλ¬κ° PICλ₯Ό μμ±νλ©°,-shared
νλκ·Έλ₯Ό λ¬λ©΄ λ§μ»€μκ² shared object fileμ μμ±νλΌκ³ λͺ λ Ήν μ μλ€.
- 곡μ λΌμ΄λΈλ¬λ¦¬λ λ©λͺ¨λ¦¬μ ν λ²λ§ λ‘λλλ©΄ λ€λ₯Έ νλ‘μΈμ€λ€μ΄ μΌλ§λ μ§ κ°μ Έλ€ μΈ μ μλ€. (COW μλμ€λ?) μ»΄νμΌ μ
-
7.11. Loading and Linking Shared Libraries from Applications
- 리λ
μ€λ λμ λ§μ»€λ₯Ό μν κ°λ¨ν(?) μΈν°νμ΄μ€λ₯Ό μ 곡νλ€.
dlfcn.h
μμdlopen
,dlsym
,dlclose
,dlerror
ν¨μ. - μ»΄νμΌ μ
-rdynamic
μ΅μ μ λ£μ΄μΌ νλ€.
- 리λ
μ€λ λμ λ§μ»€λ₯Ό μν κ°λ¨ν(?) μΈν°νμ΄μ€λ₯Ό μ 곡νλ€.
-
7.12. Position Independent Code (PIC)
- λ©λͺ¨λ¦¬μ μμ£Όν΄ μλ λΌμ΄λΈλ¬λ¦¬ μ½λλ₯Ό 곡μ νκΈ° μν΄μ PICκ° μ‘΄μ¬νλ€.
ν κ°μ§ μ κ·Ό λ°©μμ κ° κ³΅μ λΌμ΄λΈλ¬λ¦¬μ μ μ© μ£Όμ κ³΅κ° μ²ν¬λ₯Ό μ νμ μΌλ‘ ν λΉνκ³ λ‘λκ° νμ ν΄λΉ μ£Όμμμ 곡μ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ‘λνλλ‘ νλ κ²μ λλ€.
-
7.13. Library Interpositioning
- λΌμ΄λΈλ¬λ¦¬ κ΅μ°¨? 곡μ λΌμ΄λΈλ¬λ¦¬ ν¨μνΈμΆμ νμ³λ€ λ΄ μ½λλ₯Ό νΈμΆνλλ‘ λ§λλ κΈ°λ²μ μλ―Έν¨. μΌμ’ μ νν¬μ²λΌ μκ°ν΄λ μ’κ² λ€.
- compile time interpositioning, link time interpositioning, run time interpositioning
-
7.14. Tools for manipulating Object Files
ar
μ μ λΌμ΄λΈλ¬λ¦¬ μμ±ν΄strings
λͺ©μ νμΌ μμ λ€μ΄μλ λͺ¨λ λ¬Έμμ΄ λ¦¬ν°λ΄λ€μ μΆλ ₯strip
λͺ©μ νμΌμμ symbol ν μ΄λΈ μ 보λ₯Ό μ κ±°nm
λͺ©μ νμΌ λ΄ μ¬λ³Ό ν μ΄λΈ μμ μ μλ λͺ¨λ μ¬λ³Ό μΆλ ₯size
λͺ©μ νμΌμ κ° μΉμ μ μ¬μ΄μ¦μ μ΄λ¦μ μΆλ ₯readelf
ELF ν€λλ‘λΆν° λͺ©μ νμΌμ μΈκ°μ΄ λ³Ό μ μκ² λμ½λ©ν΄μ€objdump
λͺ©μ νμΌμ λͺ¨λ μ 보λ₯Ό 보μ¬μ€λ€.ldd
λ°νμμ νμν 곡μ λΌμ΄λΈλ¬λ¦¬λ€μ μ 보λ₯Ό μΆλ ₯νλ€.
-
7.15. Summary